home *** CD-ROM | disk | FTP | other *** search
/ Oh!X 2001 Spring / Oh!X 2001 Spring Special CD-ROM (Japan).7z / Oh!X 2001 Spring Special CD-ROM (Japan) (Track 1).bin / GALAXY / ohx5-2 / ohx5_2.cpp < prev    next >
C/C++ Source or Header  |  2001-01-02  |  6KB  |  225 lines

  1. //
  2. // ohx5_2.cpp
  3. //
  4. //    
  5. //
  6.  
  7. /*--------------------------------------- ヘッダーファイル&マクロ定義 ------------------------*/
  8.  
  9. #define STRICT
  10.  
  11.  
  12. #include "stdafx.h"
  13. #define    EXT
  14. #include "ohx5_2.h"
  15.  
  16. char application_name[] = "OhX-5 GalaxyKnights sample";
  17.  
  18.  
  19. // このコード モジュールに含まれる関数の前宣言:
  20. ATOM            MyRegisterClass( HINSTANCE hInstance );
  21. BOOL            InitInstance( HINSTANCE, int );
  22. LRESULT CALLBACK    main_window_proc( HWND, UINT, UINT, LONG );
  23. LRESULT CALLBACK    About( HWND, UINT, WPARAM, LPARAM );
  24. LRESULT CALLBACK IPcon( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam );
  25.  
  26. /*-------------------------------    外部変数    --------------------------------------------*/
  27.  
  28.  
  29.  
  30.  
  31. /*------------------------------- 本体コーディング ------------------------------------------*/
  32.  
  33. /*
  34.     メインウインドウを取得して、属性を与える
  35. */
  36. bool    init_window( HINSTANCE hInst,int cmdshow )
  37. {
  38. WNDCLASS wndclass;
  39. hInstApp = hInst;
  40.  
  41. //    ウインドウ・クラス作成(詳細はWindowsAPIに関する各資料を参照してください)
  42.     wndclass.style            = CS_BYTEALIGNCLIENT|CS_HREDRAW|CS_VREDRAW;    // ウインドウのスタイル定義(サイズ変更時の再描画、BYTEアライメント調整)
  43.     wndclass.lpfnWndProc    = (WNDPROC)main_window_proc;                    // メインウインドウのイベント処理プロシジャ
  44.     wndclass.cbClsExtra        = 0;
  45.     wndclass.cbWndExtra        = 0;
  46.     wndclass.hInstance        = hInst;
  47.     wndclass.hIcon            = NULL;
  48.     wndclass.hCursor        = LoadCursor(NULL,IDC_ARROW);
  49.     wndclass.hbrBackground    = (HBRUSH)GetStockObject(BLACK_BRUSH);
  50.     wndclass.lpszMenuName    = MAKEINTRESOURCE(IDC_OHX4);
  51.     wndclass.lpszClassName    = application_name;
  52.  
  53. //    ウインドウ・クラスの登録
  54.     if( !RegisterClass( &wndclass ) ){ return false; }
  55.  
  56. //    メインウインドウの確保
  57.     hwndApp = CreateWindowEx(
  58.         WS_EX_CLIENTEDGE,
  59.         application_name,
  60.         application_name,
  61.         WS_OVERLAPPEDWINDOW,
  62.         CW_USEDEFAULT,CW_USEDEFAULT,640,480,
  63.         (HWND)NULL,
  64.         (HMENU)NULL,
  65.         hInst,
  66.         (LPSTR)NULL );
  67.  
  68.     ShowWindow( hwndApp, cmdshow );
  69.     UpdateWindow( hwndApp );
  70.     return true;
  71. }
  72.  
  73.  
  74.  
  75. /*-------------------------------------------
  76.     ウィンドウ処理
  77. --------------------------------------------*/
  78. LRESULT CALLBACK main_window_proc(HWND handle,UINT msg,UINT window_param,LONG param2 )
  79. {
  80.     switch(msg){
  81.     case WM_ACTIVATE:
  82.         switch( window_param ){
  83.         case WA_ACTIVE:
  84.             restart_draw();
  85.             break;
  86.         case WA_CLICKACTIVE:
  87.         case WA_INACTIVE:
  88.             pause_draw();
  89.             break;
  90.         }
  91.         break;
  92.     case WM_ACTIVATEAPP:    // アプリケーションの状態に合わせて動作を制御する
  93.         if ((BOOL)window_param ) restart_draw(); else pause_draw();
  94.         break;
  95.     case WM_KEYDOWN:
  96.         switch( window_param ){
  97.         case VK_ESCAPE:
  98.             DestroyWindow( handle );
  99.             break;
  100.         default:
  101.             break;
  102.         }
  103.         break;
  104.     case WM_DESTROY:
  105.         PostQuitMessage(0);
  106.         break;
  107.     case WM_ENTERMENULOOP:        // メニューが選択されたら動作を停止する
  108.         pause_draw();
  109.         break;
  110.     case WM_COMMAND:            // 選択されたメニューを実行
  111.         switch( window_param ){
  112.  
  113.         case IDM_EXIT:
  114.             DestroyWindow( handle );
  115.             break;
  116.  
  117.         case IDC_CONNECT:
  118.             if( multiplayer ){ 
  119.                     DialogBox( hInst,(LPCTSTR)IDD_ALREADY, handle,(DLGPROC)About );
  120.                     break;
  121.             }
  122.             connect_player( handle );
  123.             break;
  124.         case IDC_DISCONNECT:
  125.             if( multiplayer ){ 
  126.                     disconnect_player( handle );
  127.                     break;
  128.             }
  129.             DialogBox( hInst,(LPCTSTR)IDD_NOCONNECT, handle,(DLGPROC)About );
  130.             break;
  131.  
  132.         case IDM_ABOUT:
  133.             DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, handle, (DLGPROC)About);
  134.             break;
  135.  
  136.         }
  137.         break;
  138.     case WM_EXITMENULOOP:        // メニューの選択が解除されたら動作を再開する
  139.         restart_draw();
  140.         break;
  141.     default:
  142.         return DefWindowProc( handle,msg,window_param,param2 );
  143.     }
  144.     return 0L;
  145. }
  146.  
  147. int APIENTRY WinMain(HINSTANCE hInstance,
  148.                      HINSTANCE hPrevInstance,
  149.                      LPSTR     lpCmdLine,
  150.                      int       nCmdShow )
  151. {
  152. MSG msg;
  153. HACCEL hAccelTable;
  154.  
  155.     // アプリケーションの初期化を行います:
  156.     if( !init_window( hInstance, nCmdShow ) ) {    return false; }
  157.     hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_OHX4);
  158.     if( !init_input() ){ return false; }
  159.     if( !init_D3DX() ){ return false; }
  160.     if( !start_D3DX() ){ return false; }
  161.  
  162.     init_shapes();        //    形状初期化
  163.     init_objects();        //    3Dマップ初期化
  164.     init_directplay();    //    通信機能初期化
  165.     init_player();        //    プレイヤーステータス初期化
  166.  
  167. // メイン メッセージ ループ:
  168.     msg.wParam = 0;
  169.     while( 1 ){
  170.         if (PeekMessage(&msg,0,0,0,PM_REMOVE)) {
  171.             if (msg.message == WM_QUIT)
  172.                 break;
  173.  
  174.             TranslateMessage(&msg);
  175.             DispatchMessage(&msg);
  176.         } else {
  177.             if( !realtime_render() ) PostQuitMessage(0);
  178.             player_drive();
  179.         }
  180.     }
  181.     release_directplay();    //    DirectPlay 終了処理
  182.     release_objects();        //    オブジェクト解放
  183.     release_shapes();        //    3D物体解放
  184.     release_input();        //    DirectInput解放
  185.     release_D3DX();            //    Direct3DXの終了処理
  186.     end_application();        //    アプリケーションの終了処理
  187.     return msg.wParam;
  188. }
  189.  
  190. // バージョン情報ボックス用メッセージ ハンドラ
  191. LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
  192. {
  193.     switch( message )
  194.     {
  195.         case WM_INITDIALOG:
  196.                 return TRUE;
  197.  
  198.         case WM_COMMAND:
  199.             if( LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL ) 
  200.             {
  201.                 EndDialog(hDlg, LOWORD(wParam));
  202.                 return TRUE;
  203.             }
  204.             break;
  205.     }
  206.     return FALSE;
  207. }
  208. // バージョン情報ボックス用メッセージ ハンドラ
  209. LRESULT CALLBACK IPcon( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
  210. {
  211.     switch( message )
  212.     {
  213.         case WM_INITDIALOG:
  214.                 return TRUE;
  215.  
  216.         case WM_COMMAND:
  217.             if( LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL ) 
  218.             {
  219.                 EndDialog(hDlg, LOWORD(wParam));
  220.                 return TRUE;
  221.             }
  222.             break;
  223.     }
  224.     return FALSE;
  225. }